"""
类型注解

- 为变量设置类型注解

=====================================================
语法：
变量: 类型

- 元组类型设置类型详细注解，需要将每一个元素都标记出来
- 字典类型设置类型详细注解，需要2个类型，第一个是key第二个是value

=====================================================
除了使用 变量: 类型， 这种语法做注解外，也可以在注释中进行类型注解。

- # type: 类型

=====================================================
函数的类型注解

def 函数名(形参1: 类型, 形参2: 类型...) -> 返回值类型:
    函数体
"""

print("=====================================================")
# 基础数据类型注解
var_1: int = 10
var_2: str = "hello world"
var_3: float = 3.14
var_4: bool = True


print("=====================================================")


# 类对象类型注解
class Student:
    pass


stu: Student = Student()

print("=====================================================")
# 基础容器类型注解
my_list: list = [1, 2, 3, 4]
my_tuple: tuple = (1, 2, 3)
my_set: set = {1, 2, 3}
my_dict: dict = {"张三": 99}
my_str: str = "hello world"


print("=====================================================")
# 容器类型详细注解
# 元组类型设置类型详细注解，需要将每一个元素都标记出来
# 字典类型设置类型详细注解，需要2个类型，第一个是key第二个是value
my_list1: list[int] = [1, 2, 3, 4]
my_tuple1: tuple[str, int, bool] = ("hello", 2, True)
my_set1: set[int] = {1, 2, 3}
my_dict1: dict[str, int] = {"张三": 99}
my_str1: str = "hello world"


print("=====================================================")
# 基础数据类型注解
var_11 = 10  # type: int
var_21 = "hello world"  # type: str
var_31 = 3.14  # type: float
var_41 = True  # type: bool


print("=====================================================")


# 类对象类型注解
stu1 = Student()  # type: Student

print("=====================================================")
# 基础容器类型注解
my_list1 = [1, 2, 3, 4]  # type: list
my_tuple1 = (1, 2, 3)  # type: tuple
my_set1 = {1, 2, 3}  # type: set
my_dict1 = {"张三": 99}  # type: dict
my_str1 = "hello world"  # type: str


print("=====================================================")
# 容器类型详细注解
# 元组类型设置类型详细注解，需要将每一个元素都标记出来
# 字典类型设置类型详细注解，需要2个类型，第一个是key第二个是value
my_list2 = [1, 2, 3, 4]  # type: list[int]
my_tuple2 = ("hello", 2, True)  # type: tuple[str, int, bool]
my_set2 = {1, 2, 3}  # type: set[int]
my_dict2 = {"张三": 99}  # type: dict[str, int]
my_str2 = "hello world"  # type: str


print("=====================================================")


def add(x: int, y: int) -> int:
    return x + y
